package com.wenx.v3system.modular.platform.service;

import com.wenx.v3system.modular.platform.domain.dto.PlatformLoginResult;
import com.wenx.v3system.modular.platform.domain.dto.PlatformUserDto;

/**
 * 平台认证服务接口
 * 
 * @author wenx
 */
public interface PlatformAuthService {

    /**
     * 平台用户登录
     *
     * @param username 用户名
     * @param password 密码
     * @return 登录结果
     */
    PlatformLoginResult login(String username, String password);

    /**
     * 平台用户登出
     *
     * @param token 访问令牌
     */
    void logout(String token);

    /**
     * 刷新访问令牌
     *
     * @param refreshToken 刷新令牌
     * @return 新的登录结果
     */
    PlatformLoginResult refreshToken(String refreshToken);

    /**
     * 验证Token并获取用户信息
     *
     * @param token 访问令牌
     * @return 用户信息
     */
    PlatformUserDto validateToken(String token);

    /**
     * 检查用户权限
     *
     * @param userId     用户ID
     * @param permission 权限编码
     * @return 是否有权限
     */
    boolean hasPermission(Long userId, String permission);

    /**
     * 检查用户菜单权限
     *
     * @param userId   用户ID
     * @param menuCode 菜单编码
     * @return 是否有权限
     */
    boolean hasMenuPermission(Long userId, String menuCode);

    /**
     * 基于Token检查用户权限
     *
     * @param token      访问令牌
     * @param permission 权限编码
     * @return 是否有权限
     */
    boolean hasPermissionByToken(String token, String permission);

    /**
     * 基于Token检查用户菜单权限
     *
     * @param token    访问令牌
     * @param menuCode 菜单编码
     * @return 是否有权限
     */
    boolean hasMenuPermissionByToken(String token, String menuCode);
}